package com.utils;

import com.model.Judge;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DatabaseOperations implements DatabaseOperationsImp {
    PreparedStatement pst=null;
    Connection con=null;

    /**
     * 信息的浏览
     * 最终结果返回一个二维的字符数组
     * @param table 表名
     * @return 返回二维字符串结果集
     */
    public String[][] browsingData(String table){
        try {
            con= JdbcUtils.getConnection();
            String sql="select * from `"+table+"`";
            //配置结果集，使查询后的结果集的指针可以自由移动
            pst=con.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            ResultSet resultSet = pst.executeQuery();
            //将结果集转换成二维字符串数组，并返回
            return JdbcUtils.changeString(resultSet);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 信息的添加
     * 依次输入`name`,`birthday`,`id_number`,`cert_id`,`cert_time`,`rank`
     * 完成信息的添加
     * @param table  表名
     * @param str   按顺序插入的信息
     * @return 二维字符串数组
     */
    public boolean addData(String table,String[] columnName,String[] str){
        try {
            //拼接表头字符串
            StringBuilder cl = new StringBuilder("(");
            StringBuilder value=new StringBuilder("(");
            for(int i=0;i<columnName.length;i++){
                value.append("?");
                cl.append("`").append(columnName[i]).append("`");
                if(i!=columnName.length-1){
                    cl.append(",");
                    value.append(",");
                }
                else{
                    value.append(")");
                    cl.append(")");
                }

            }
            con=JdbcUtils.getConnection();
            String sql="insert into "+table+cl+" value"+value;
            pst=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            for(int i=0;i<str.length;i++){
                pst.setString(i+1,str[i]);
            }
            int i = pst.executeUpdate();
            return i == 1;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 信息的删除
     * 输入裁判的身份证号，删除裁判的信息
     * @param table 表名
     * @param columnName 列名
     * @param newData 值
     * @return true为正常，false为不正常
     */
    public boolean deleteData(String table,String columnName,String newData){
        try {
            con=JdbcUtils.getConnection();
            String sql="delete from "+table+" where "+columnName+"=?";
            pst=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            pst.setString(1,newData);
            int i=pst.executeUpdate();
            return i==1;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 修改信息
     * 需知道列名，新的值，教练的id编号
     * @param table 表名
     * @param columnName 列名
     * @param newData   新的值
     * @param index 索引列名
     * @param idValue 索引列属性的值
     * @return  没毛病返回true，反之false
     */
    public boolean updateData(String table,String columnName ,String newData,String index,String idValue){
        try {
            con=JdbcUtils.getConnection();
            String sql="update "+table+" set "+columnName+"=?where "+index+"=?";
            pst=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            pst.setString(1,newData);
            pst.setString(2,idValue);
            int i= pst.executeUpdate();
            return i==1;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 以id号查询信息
     * @param table 表名
     * @param index 索引属性
     * @param idValue 索引值
     * @return 返回二维字符串结果
     */
    public String[][] queryData(String table,String index,String idValue){
        try {
            con=JdbcUtils.getConnection();
            String sql="select * from "+table+" where `"+index+"`=?";
            pst=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            pst.setString(1,idValue);
            ResultSet resultSet = pst.executeQuery();
            return JdbcUtils.changeString(resultSet);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public String[] nationsV(String table, String item) {
        try {
            con=JdbcUtils.getConnection();
            String sql="select DISTINCT `"+item+"` from "+table;
            pst=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            ResultSet resultSet = pst.executeQuery();

            String[][] str=JdbcUtils.changeString(resultSet);
            String[] re=new String[str.length-1];
            for(int i=1;i< str.length;i++){
                re[i-1]=str[i][0];
            }
            return re;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}
